package com.xiaoyu.arrays;

/**
 * @program: DS_and_A
 * @description:
 * 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
 * 你可以假设数组中无重复元素。
 *
 *
 * @author: YuWenYi
 * @create: 2021-04-23 08:16
 **/
public class SearchInsert {
    public static int searchInsert(int[] nums, int target) {
        //先掐头尾,掐尾的目的是为了防止数组越界
        if (nums[0] > target)
            return 0;
        if (nums[nums.length-1] < target)
            return nums.length;

        //判断如果目标数等于数组中的某个数,那么就返回下标
        for (int i = 0; i < nums.length; i++) {
            if(nums[i] == target){
                return i;
            } else if (nums[i] < target && nums[i+1] > target){
                //如果目标数大于现在坐标的数字,却小于下一个数字,那么即为满足条件的数字,返回当前下标i+1
                return i+1;
            }
        }
        return -1;

/*
        评论区大佬解法:
        简单方便,仔细一想,如果一个数小于等于数组中的某个数,那么直接返回该数的下标,即可完成答案
        如果都不小于,那么该数大于数组中的所有元素,那么返回数组的长度,即为答案

        for(int i = 0; i < nums.length;i++){
            if(nums[i] >= target){
                return i;
            }
        }
        return nums.length;*/
    }

    public static void main(String[] args) {
        /*
        * 输入: [1,3,5,6], 2
          输出: 1
          输入: [1,3,5,6], 5
          输出: 2
        * */
        int[] nums = new int[]{1,3,5,8};
        int target = 5;
        int result = searchInsert(nums, target);
        System.out.println("------->"+result);
    }
}
